﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;

namespace ZoneLineNew.Core.Utils {


    /// <summary>
    /// MD5加密
    /// </summary>
    public class Md5CryptionUtil {

        private const string _enCryptionKey = "kaishiauto.com";

        /// <summary>
        /// 计算字符串的32位小写MD5哈希值
        /// </summary>
        /// <param name="input">输入字符串</param>
        /// <returns>32位小写MD5哈希值</returns>
        public static string GetMD5_32Lower(string input) {
            // 处理空输入（可选，根据需求调整）
            if (string.IsNullOrEmpty(input))
                return string.Empty;

            // 创建MD5实例（using确保资源释放）
            using (MD5 md5 = MD5.Create()) {
                // 1. 将输入字符串转换为UTF8字节数组
                byte[] inputBytes = Encoding.UTF8.GetBytes(input);

                // 2. 计算MD5哈希值（返回16字节的哈希数组）
                byte[] hashBytes = md5.ComputeHash(inputBytes);

                // 3. 将16字节哈希数组转换为32位小写十六进制字符串
                // （每个字节对应2位十六进制，16×2=32位）
                StringBuilder sb = new StringBuilder();
                foreach (byte b in hashBytes) {
                    // "x2"：确保每个字节转换为2位小写十六进制（不足补0）
                    sb.Append(b.ToString("x2"));
                }

                return sb.ToString();
            }
        }

        /// <summary>
        /// 加密
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public static string EnCryption(string input) {
            string str = GetMD5_32Lower(input);
            str += _enCryptionKey;
            str = GetMD5_32Lower(str);
            return str;
        }


    }

}
